package com.ssky.bean.validator.core.checker;

import com.ssky.bean.validator.core.Feedback;
import com.ssky.bean.validator.core.IValidatorContext;
import com.ssky.bean.validator.core.rule.Field;

public interface IChecker<V, L, B> {

    /**
     * bean规则描述文档中唯一的ruleId
     * @return
     */
    String getId();

    void init() throws Exception;

    /**
     * 规则执行器
     * @param v 规则校验的当前值
     * @param l 当前值作为属性的所在对象
     * @param b 当前值所在的顶级javaBean对象
     * @param ctx 上下文（针对具体规则的实现要求，可基于接口IValidatorContext扩展）
     * @return
     */
    Feedback check(V v, L l, B b, IValidatorContext ctx);

    /**
     *  规则作为条件时的执行器
     *  <li/> 参数中为什么没有当前值，因为作为被依赖时，没法直接确定值。需要间接获取值
     * @param l
     * @param b
     * @param ctx 上下文（针对具体规则的实现要求，可基于接口IValidatorContext扩展）
     * @return
     */
    boolean exeCondition(L l, B b, IValidatorContext ctx);


}
